LINQ (Language Integrated Query) এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং দুটি শক্তিশালী কৌশল যা C# এ বিভিন্ন ধরনের ডেটা প্রসেসিং এবং I/O অপারেশনগুলোকে দক্ষ এবং দ্রুত করার জন্য ব্যবহৃত হয়। LINQ মূলত ডেটা কোয়েরি করার জন্য ব্যবহৃত হয়, তবে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এটি একটি সিস্টেমের বিভিন্ন কাজ একসাথে বা প্যারালেলভাবে সম্পাদন করার জন্য ব্যবহৃত হয়, যাতে মূল থ্রেড ব্লক না হয়।
এখানে আমরা দেখব কিভাবে LINQ কে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের সাথে একত্রে ব্যবহার করা যায়, বিশেষত ডেটাবেস থেকে ডেটা কোয়েরি করার সময় বা নেটওয়ার্কের সাথে কাজ করার সময়।
C# এ, LINQ এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংকে একসাথে ব্যবহার করা যায় async এবং await কিওয়ার্ড ব্যবহার করে। যখন ডেটার সাথে কাজ করতে বা অ্যাসিঙ্ক্রোনাস অপারেশন (যেমন ডেটাবেস কোয়েরি বা নেটওয়ার্ক রিকোয়েস্ট) করতে হবে, তখন অ্যাসিঙ্ক্রোনাস কাজগুলো কার্যকরভাবে সম্পাদন করা সম্ভব হয়।
LINQ কুয়েরি এবং অ্যাসিঙ্ক্রোনাস অপারেশনগুলোর সংমিশ্রণ করার জন্য সাধারণত ToListAsync()
, FirstOrDefaultAsync()
, WhereAsync()
ইত্যাদি মেথড ব্যবহার করা হয়, যা LINQ কে অ্যাসিঙ্ক্রোনাস কুয়েরি অপারেশন হিসেবে রূপান্তরিত করে।
ধরা যাক, আমরা একটি ডেটাবেস থেকে অ্যাসিঙ্ক্রোনাসভাবে ডেটা ফেচ করতে চাই, এবং সেই ডেটার উপর LINQ কুয়েরি চালাবো। আমরা Entity Framework Core ব্যবহার করবো, যেখানে অ্যাসিঙ্ক্রোনাস অপারেশনগুলো সহজেই করা যায়।
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public string Department { get; set; }
}
public class ApplicationDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
}
// অ্যাসিঙ্ক্রোনাসভাবে ডেটা ফেচ এবং LINQ কুয়েরি প্রয়োগ করা
public async Task GetEmployeesAsync()
{
using (var context = new ApplicationDbContext())
{
var employees = await context.Employees
.Where(e => e.Department == "IT")
.ToListAsync(); // LINQ with async
foreach (var employee in employees)
{
Console.WriteLine($"Employee Name: {employee.Name}, Department: {employee.Department}");
}
}
}
এখানে:
ToListAsync()
একটি অ্যাসিঙ্ক্রোনাস অপারেশন যা ডেটাবেস থেকে ডেটা ফেচ করবে।await
কিওয়ার্ডটি ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোডটি কার্যকরভাবে ব্লক করা হবে না এবং UI থ্রেড ফree থাকবে।Where
শর্তের মাধ্যমে IT
ডিপার্টমেন্টের কর্মচারী নির্বাচন করছে।অ্যাসিঙ্ক্রোনাসভাবে HTTP রিকোয়েস্ট করার পর সেই ডেটার উপর LINQ কুয়েরি চালানোও সম্ভব। উদাহরণস্বরূপ, যদি আপনি একটি REST API থেকে ডেটা ফেচ করতে চান এবং তারপর সেই ডেটার উপর LINQ কুয়েরি চালাতে চান, তাহলে আপনি HttpClient
এর সাথে অ্যাসিঙ্ক্রোনাস অপারেশন ব্যবহার করতে পারেন।
public async Task GetEmployeeDataFromApiAsync()
{
using (HttpClient client = new HttpClient())
{
string apiUrl = "https://api.example.com/employees";
string jsonResponse = await client.GetStringAsync(apiUrl); // HTTP Request (async)
var employees = JsonConvert.DeserializeObject<List<Employee>>(jsonResponse); // Deserialize JSON to List
var filteredEmployees = employees.Where(e => e.Department == "HR").ToList(); // LINQ to filter data asynchronously
foreach (var employee in filteredEmployees)
{
Console.WriteLine($"Name: {employee.Name}, Department: {employee.Department}");
}
}
}
এখানে:
GetStringAsync()
একটি অ্যাসিঙ্ক্রোনাস HTTP রিকোয়েস্ট মেথড যা API থেকে ডেটা ফেচ করবে।HR
ডিপার্টমেন্টের কর্মচারীদের ফিল্টার করা হচ্ছে।LINQ এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং একত্রে ব্যবহার করে parallel processing করা সম্ভব। এর জন্য Task.WhenAll()
ব্যবহার করা হয়, যা একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একসাথে সম্পন্ন করতে সহায়তা করে।
public async Task GetEmployeesInParallelAsync()
{
List<Task<Employee>> tasks = new List<Task<Employee>>();
// কর্মচারীদের নাম অনুযায়ী আলাদা অ্যাসিঙ্ক্রোনাস অপারেশন তৈরি
tasks.Add(Task.Run(() => GetEmployeeByNameAsync("Alice")));
tasks.Add(Task.Run(() => GetEmployeeByNameAsync("Bob")));
tasks.Add(Task.Run(() => GetEmployeeByNameAsync("Charlie")));
// সমস্ত অ্যাসিঙ্ক্রোনাস অপারেশন সমাপ্ত হওয়া পর্যন্ত অপেক্ষা করুন
var results = await Task.WhenAll(tasks);
// LINQ ব্যবহার করে কর্মচারীদের তথ্য প্রসেস করুন
var employeeNames = results.Select(e => e.Name).ToList();
foreach (var name in employeeNames)
{
Console.WriteLine(name);
}
}
public async Task<Employee> GetEmployeeByNameAsync(string name)
{
// একটি এপিআই বা ডেটাবেস থেকে অ্যাসিঙ্ক্রোনাসভাবে কর্মচারী ডেটা ফেচ করা
await Task.Delay(500); // Simulate async operation (fake delay)
return new Employee { Name = name, Department = "IT" };
}
এখানে:
Task.WhenAll()
ব্যবহার করে একাধিক অ্যাসিঙ্ক্রোনাস কাজ একসাথে সম্পাদন করা হচ্ছে।GetEmployeeByNameAsync
মেথডের মাধ্যমে আলাদা আলাদা কর্মচারীর তথ্য ফেচ করা হচ্ছে এবং LINQ ব্যবহার করে নামগুলোর তালিকা তৈরি করা হচ্ছে।LINQ এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং একত্রে ব্যবহার করার ফলে ডেটা প্রসেসিং এবং I/O অপারেশনগুলোর দক্ষতা এবং পারফরম্যান্স বৃদ্ধি পায়। অ্যাসিঙ্ক্রোনাস অপারেশনগুলি সিস্টেমকে রেসপন্সিভ রাখে এবং CPU এর অপচয় কমায়। LINQ কে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের সাথে মেলানোর জন্য async
, await
, এবং LINQ এর অ্যাসিঙ্ক্রোনাস মেথড (যেমন ToListAsync()
, FirstOrDefaultAsync()
) ব্যবহার করা হয়, যা ডেটা কোয়েরি এবং প্রক্রিয়া করার কার্যকারিতা অনেক বৃদ্ধি করে।
LINQ (Language Integrated Query) সাধারণত ডেটা কুয়েরি করার জন্য ব্যবহৃত হয়, তবে অনেক সময় ডেটা সংগ্রহ এবং প্রসেসিং দীর্ঘ সময় নিতে পারে, যেমন নেটওয়ার্ক কল, ডেটাবেসের সাথে ইন্টারঅ্যাকশন, অথবা বড় ডেটা সেটের উপর কাজ। এর ফলে, অ্যাসিঙ্ক্রোনাস অপারেশন (Asynchronous Operations) ব্যবহারের প্রয়োজনীয়তা দেখা দেয়। C#-এ async
এবং await
কীওয়ার্ড ব্যবহার করে আপনি অ্যাসিঙ্ক্রোনাস অপারেশন সহজভাবে পরিচালনা করতে পারেন।
LINQ এর সাধারণ কুয়েরিগুলি সিঙ্ক্রোনাস হয়, কিন্তু যখন ডেটা উৎস (যেমন ডেটাবেস বা ওয়েব সার্ভিস) অ্যাসিঙ্ক্রোনাস হয়, তখন LINQ কুয়েরি অপারেশনগুলিকে অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করা খুবই কার্যকরী হতে পারে। এখানে LINQ এবং Async-Await এর ব্যবহার নিয়ে আলোচনা করা হবে।
async
এবং await
ব্যবহার করে আপনি দীর্ঘ-running অপারেশনগুলি (যেমন ডেটাবেস কুয়েরি, HTTP কল) সিঙ্ক্রোনাস কোডের মতোই ব্যবহার করতে পারেন, তবে এগুলি সম্পন্ন হতে সময় নিতে পারে। LINQ নিজে অ্যাসিঙ্ক্রোনাস নয়, তবে আপনি LINQ কুয়েরির সাথে অ্যাসিঙ্ক্রোনাস অপারেশন যুক্ত করতে পারেন।
.NET Core বা .NET Framework-এ Entity Framework Core বা LINQ to SQL এর মতো ডেটাবেস লাইব্রেরি অ্যাসিঙ্ক্রোনাস অপারেশন সাপোর্ট করে। উদাহরণস্বরূপ, ToListAsync()
, FirstOrDefaultAsync()
, AnyAsync()
ইত্যাদি মেথডগুলো ব্যবহার করে LINQ কুয়েরি অ্যাসিঙ্ক্রোনাসভাবে এক্সিকিউট করা সম্ভব।
ধরা যাক, আপনি ডেটাবেস থেকে কিছু তথ্য অ্যাসিঙ্ক্রোনাসভাবে লোড করতে চান। এর জন্য await
এবং async
ব্যবহারের মাধ্যমে অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন করা যায়।
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<Person> People { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var dbContext = new AppDbContext();
// LINQ কুয়েরি অ্যাসিঙ্ক্রোনাসভাবে এক্সিকিউট করা
var people = await dbContext.People
.Where(p => p.Age > 30)
.ToListAsync(); // ToListAsync() অ্যাসিঙ্ক্রোনাস মেথড
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
এখানে:
ToListAsync()
হলো Entity Framework Core এর অ্যাসিঙ্ক্রোনাস মেথড যা ডেটাবেস থেকে ডেটা অ্যাসিঙ্ক্রোনাসভাবে লোড করতে সাহায্য করে।await
কিওয়ার্ড ব্যবহৃত হয়েছে যাতে অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হওয়ার পরেই পরবর্তী কোড এক্সিকিউট হয়।ToListAsync()
, FirstOrDefaultAsync()
, AnyAsync()
ইত্যাদি।Cancellation Token: অ্যাসিঙ্ক্রোনাস অপারেশন ব্যবহারের সময় CancellationToken ব্যবহার করা গুরুত্বপূর্ণ যাতে আপনি অপারেশন বাতিল করতে পারেন যদি প্রয়োজন হয়। এটি দীর্ঘ-running অপারেশনের ক্ষেত্রে বিশেষভাবে দরকার।
উদাহরণ:
var cancellationTokenSource = new CancellationTokenSource();
var token = cancellationTokenSource.Token;
var result = await dbContext.People
.Where(p => p.Age > 30)
.ToListAsync(token);
যদিও Async-Await LINQ কুয়েরি এক্সিকিউশনে অনেক সুবিধা প্রদান করে, তবুও এর কিছু সীমাবদ্ধতা রয়েছে:
LINQ to Objects
(যেমন, List<T>
) জন্য async
/await
সরাসরি সমর্থিত নয়, তবে যদি ডেটা একটি অ্যাসিঙ্ক্রোনাস উৎস থেকে আসছে (যেমন ডেটাবেস), তবে আপনি LINQ কুয়েরি অ্যাসিঙ্ক্রোনাসভাবে করতে পারেন।LINQ এবং async-await একসাথে ব্যবহারের মাধ্যমে ডেটা কুয়েরি এবং প্রসেসিংয়ের পারফরম্যান্স বাড়ানো সম্ভব। অ্যাসিঙ্ক্রোনাস অপারেশন মূলত I/O-bound কাজের জন্য উপযোগী এবং এটি UI responsiveness এবং পারফরম্যান্স বাড়াতে সাহায্য করতে পারে। তবে, CPU-bound কাজের জন্য অ্যাসিঙ্ক্রোনাস অপারেশন ব্যবহারের কোন বিশেষ লাভ নেই এবং সেক্ষেত্রে অন্য অপটিমাইজেশন কৌশল প্রয়োগ করতে হবে।
অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং একটি শক্তিশালী কৌশল যা আপনাকে ডেটা সংগ্রহ এবং প্রসেসিং করতে সহায়তা করে, তাও মূল থ্রেড ব্লক না করে। যখন ডেটা বাইরে থেকে (যেমন ডেটাবেস, API, বা ফাইল সিস্টেম থেকে) আনা হয়, তখন অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং কার্যকরী হতে পারে, কারণ এটি ইউজার ইন্টারফেসের সাড়া দেয়ার ক্ষমতা বাড়ায় এবং প্রোগ্রামের পারফরম্যান্স উন্নত করে।
এখানে কিছু কার্যকরী অ্যাসিঙ্ক্রোনাস ডেটা ফেচিং টেকনিক্স দেওয়া হলো, যেগুলি C#-এ async
এবং await
ব্যবহার করে বাস্তবায়ন করা যায়।
async
এবং await
ব্যবহার করে অ্যাসিঙ্ক্রোনাস ডেটা ফেচিংC#-এ async
এবং await
কীওয়ার্ড ব্যবহার করে আপনি অ্যাসিঙ্ক্রোনাস অপারেশন সহজভাবে পরিচালনা করতে পারেন। যখন ডেটা বাইরে থেকে আসে এবং অপারেশন দীর্ঘ হতে পারে, তখন অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং মূল থ্রেডকে ব্লক না করে সেই ডেটা প্রক্রিয়া করে।
public async Task<List<string>> GetDataFromApiAsync()
{
// অ্যাসিঙ্ক্রোনাস API কল সিমুলেট করা
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("https://api.example.com/data");
// ডেটা প্রক্রিয়া এবং ফেরত পাঠানো
return JsonConvert.DeserializeObject<List<string>>(response);
}
এখানে:
GetDataFromApiAsync()
মেথডটি async
হিসেবে চিহ্নিত করা হয়েছে।await
কিওয়ার্ড ব্যবহার করা হয়েছে যাতে API থেকে রেসপন্স আসার পর পরবর্তী কোড এক্সিকিউট হয়, কিন্তু থ্রেড ব্লক না হয়ে কাজ চালিয়ে যায়।ফাইল পড়া এবং লেখার জন্য অ্যাসিঙ্ক্রোনাস মেথড ব্যবহার করা যেতে পারে, যাতে ইউজার ইন্টারফেস ব্লক না হয়। দীর্ঘ ফাইল অপারেশন অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করলে অ্যাপ্লিকেশন আরও প্রতিক্রিয়া সাপেক্ষ হয়।
public async Task<string> ReadFileAsync(string filePath)
{
using (StreamReader reader = new StreamReader(filePath))
{
return await reader.ReadToEndAsync();
}
}
এখানে:
ReadToEndAsync()
একটি অ্যাসিঙ্ক্রোনাস মেথড যা ফাইলের সমস্ত কন্টেন্ট এক্সট্র্যাক্ট করে এবং থ্রেড ব্লক না হয়ে এই কাজটি সম্পন্ন হয়।Task.WhenAll
ব্যবহার করে প্যারালাল ডেটা ফেচিংযখন একাধিক উৎস থেকে ডেটা অ্যাসিঙ্ক্রোনাসভাবে সংগ্রহ করতে হয় (যেমন, একাধিক API বা সার্ভিস), তখন Task.WhenAll()
ব্যবহার করে একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একসাথে চালানো যায়। এটি সময় সাশ্রয়ী এবং কার্যকরী হয়।
public async Task FetchDataFromMultipleApisAsync()
{
var api1Task = GetDataFromApiAsync("https://api.example1.com");
var api2Task = GetDataFromApiAsync("https://api.example2.com");
await Task.WhenAll(api1Task, api2Task); // দুইটি অ্যাসিঙ্ক্রোনাস টাস্ক একসাথে চালানো
var dataFromApi1 = api1Task.Result;
var dataFromApi2 = api2Task.Result;
// ডেটা প্রক্রিয়া
}
এখানে:
Task.WhenAll()
ব্যবহার করে একসাথে দুইটি অ্যাসিঙ্ক্রোনাস অপারেশন চালানো হয়েছে।await
নিশ্চিত করে যে দুটি টাস্ক সম্পন্ন হওয়ার পরই ফলাফল পাওয়া যাবে।ডেটাবেসের সাথে কাজ করার সময় অ্যাসিঙ্ক্রোনাস অপারেশন ব্যবহার করা খুবই গুরুত্বপূর্ণ। এটি ডেটাবেসের সাথে যোগাযোগ করার সময় সিস্টেমের পারফরম্যান্সকে উন্নত করে এবং মূল থ্রেডকে ব্লক হতে বাধা দেয়।
public async Task<List<Product>> GetProductsAsync()
{
using (var context = new ApplicationDbContext())
{
return await context.Products.ToListAsync(); // অ্যাসিঙ্ক্রোনাসভাবে ডেটা সংগ্রহ
}
}
এখানে:
ToListAsync()
একটি অ্যাসিঙ্ক্রোনাস মেথড যা Entity Framework থেকে ডেটা অ্যাসিঙ্ক্রোনাসভাবে সংগ্রহ করে।await
নিশ্চিত করে যে ডেটা ফেচ হওয়ার পর পরবর্তী কোড এক্সিকিউট হবে।অ্যাসিঙ্ক্রোনাস অপারেশন কখনও কখনও দীর্ঘ সময় নিতে পারে। কখনও কখনও ইউজার চাইতে পারে যে, যদি অপারেশন খুব দীর্ঘ হয় বা আগের থেকে বাতিল করতে হয়, তখন সেক্ষেত্রে CancellationToken ব্যবহার করা যেতে পারে।
public async Task<string> GetDataWithCancellationAsync(CancellationToken cancellationToken)
{
HttpClient client = new HttpClient();
// ক্যানসেলেশন সাপোর্ট সহ অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট
var response = await client.GetStringAsync("https://api.example.com/data", cancellationToken);
return response;
}
এখানে:
CancellationToken
ব্যবহার করে অ্যাসিঙ্ক্রোনাস অপারেশন বাতিল করার সুযোগ পাওয়া যায়।অ্যাসিঙ্ক্রোনাস অপারেশনে যেমন API কল বা ডেটাবেস এক্সিকিউশন, তেমনই ত্রুটিও হতে পারে। এই কারণে, অ্যাসিঙ্ক্রোনাস কোডে ত্রুটি পরিচালনা খুবই গুরুত্বপূর্ণ। C#-এ try-catch
ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং করা যায়।
public async Task<string> FetchDataWithErrorHandlingAsync()
{
try
{
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("https://api.example.com/data");
return response;
}
catch (HttpRequestException ex)
{
// নেটওয়ার্ক-সংক্রান্ত ত্রুটি হ্যান্ডলিং
Console.WriteLine("Error fetching data: " + ex.Message);
return null;
}
}
এখানে:
try-catch
ব্লক ব্যবহার করা হয়েছে যাতে অ্যাসিঙ্ক্রোনাস অপারেশনে কোনো ত্রুটি ঘটলে তা সঠিকভাবে হ্যান্ডল করা যায়।অ্যাসিঙ্ক্রোনাস ডেটা ফেচিং কৌশলগুলি C#-এ কার্যকরভাবে ডেটা সংগ্রহ এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। async
এবং await
ব্যবহার করে ডেটাবেস, API বা ফাইল থেকে ডেটা আনা যায় থ্রেড ব্লক না করে। এটি অ্যাপ্লিকেশনকে আরো প্রতিক্রিয়া সাপেক্ষ এবং দক্ষ করে তোলে।
LINQ (Language Integrated Query) এবং Task Parallel Library (TPL) উভয়ই C# এবং .NET এ অ্যাপ্লিকেশন পারফরম্যান্স উন্নত করার জন্য শক্তিশালী টুলস। যদিও তারা আলাদা কৌশলে কাজ করে, তবে যখন তাদের একসাথে ব্যবহার করা হয়, তখন পারফরম্যান্স আরও উন্নত করা সম্ভব হয়, বিশেষ করে বৃহৎ ডেটাসেট বা দীর্ঘ-running অপারেশনগুলো পরিচালনা করতে।
LINQ ডেটা কুয়েরি করার জন্য ব্যবহৃত হয়, আর TPL অ্যাসিঙ্ক্রোনাস ও প্যারালাল অপারেশনগুলো পরিচালনা করার জন্য। এই দুটি প্রযুক্তি একসাথে ব্যবহার করা হলে আপনার অ্যাপ্লিকেশন আরও দ্রুত এবং কার্যকরী হতে পারে।
LINQ এবং TPL একসাথে ব্যবহার করার প্রধান সুবিধা হল আপনি ডেটা প্রসেসিং এবং প্যারালাল প্রসেসিং একসাথে করতে পারেন। TPL ব্যবহার করে অ্যাসিঙ্ক্রোনাস বা প্যারালাল থ্রেডে LINQ কোয়েরি চালানো যায়, যা আপনাকে বৃহৎ ডেটাসেট খুব দ্রুত প্রক্রিয়া করতে সাহায্য করে।
PLINQ (Parallel LINQ) হলো LINQ এর একটি এক্সটেনশন যা প্যারালাল প্রসেসিং সমর্থন করে। PLINQ ব্যবহার করে আপনি ডেটাকে একাধিক থ্রেডে বিভক্ত করে দ্রুত প্রক্রিয়া করতে পারেন। এটি TPL এর সুবিধা নিয়ে LINQ কোয়েরির পারফরম্যান্স উন্নত করে।
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// PLINQ ব্যবহার করে প্যারালাল ফিল্টারিং
var evenNumbers = numbers.AsParallel()
.Where(n => n % 2 == 0)
.ToList();
// রেজাল্ট প্রিন্ট
foreach (var number in evenNumbers)
{
Console.WriteLine(number);
}
এখানে:
AsParallel()
মেথডটি ব্যবহার করে ডেটাকে প্যারালাল প্রসেসিংয়ের জন্য প্রস্তুত করা হয়েছে।Where()
ক্লজে ব্যবহার করা ফিল্টার প্যারালালভাবে একাধিক থ্রেডে প্রক্রিয়া করা হচ্ছে।TPL এর Task
ক্লাস ব্যবহার করে আপনি অ্যাসিঙ্ক্রোনাসভাবে LINQ কোয়েরি চালাতে পারেন। এর মাধ্যমে আপনি একাধিক ব্যাকগ্রাউন্ড থ্রেডে কোয়েরি চালাতে পারবেন, যা অ্যাপ্লিকেশনকে আরও প্রতিক্রিয়া সাপেক্ষ এবং দ্রুত বানাবে।
public async Task<List<int>> GetEvenNumbersAsync(List<int> numbers)
{
return await Task.Run(() =>
{
return numbers.AsParallel()
.Where(n => n % 2 == 0)
.ToList();
});
}
এখানে:
Task.Run()
ব্যবহার করে কোয়েরি অ্যাসিঙ্ক্রোনাসভাবে চালানো হচ্ছে, যাতে মূল থ্রেড ব্লক না হয়।AsParallel()
প্যারালাল প্রসেসিং ব্যবহার করে কোয়েরি দ্রুততার সাথে সম্পন্ন হয়।যখন একটি বড় ডেটাসেট নিয়ে কাজ করা হয়, TPL এর সাহায্যে সেই ডেটার উপরে একাধিক লজিক্যাল অপারেশন চালানো যেতে পারে। এর মাধ্যমে আমরা বিভিন্ন ডেটা অপারেশনগুলোকে একাধিক থ্রেডে বিভক্ত করে দ্রুত সম্পন্ন করতে পারি।
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// PLINQ এবং TPL একসাথে ব্যবহার
var results = await Task.WhenAll(
numbers.AsParallel()
.Select(n => Task.Run(() => ProcessNumber(n)))
.ToArray()
);
foreach (var result in results)
{
Console.WriteLine(result);
}
public int ProcessNumber(int number)
{
// কিছু লজিক্যাল প্রসেসিং
return number * 2;
}
এখানে:
Task.WhenAll()
ব্যবহার করে একাধিক অ্যাসিঙ্ক্রোনাস টাস্ক একসাথে চালানো হচ্ছে।AsParallel()
ব্যবহার করে প্যারালাল কোয়েরি চালানো হচ্ছে, যাতে ডেটা দ্রুত প্রক্রিয়া হয়।LINQ এবং TPL একসাথে ব্যবহারের মাধ্যমে আপনি ডেটা প্রসেসিংকে প্যারালাল ও অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করতে পারেন। এতে করে অ্যাপ্লিকেশন পারফরম্যান্স উন্নত হয়, বিশেষত বড় ডেটাসেট বা দীর্ঘ-running অপারেশন পরিচালনার ক্ষেত্রে। TPL প্যারালাল বা অ্যাসিঙ্ক্রোনাস কাজগুলো চালাতে সাহায্য করে, আর LINQ দিয়ে সহজে ডেটার উপর অপারেশন করা যায়।
LINQ এবং TPL এর সংমিশ্রণ আপনাকে সহজ, দ্রুত এবং কার্যকরী ডেটা প্রসেসিং অপারেশন করতে সাহায্য করবে।
common.read_more